iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
自我挑戰組

純新手學習 JavaScript系列 第 22

新手學習JavaScript:day22 - Two Sum

  • 分享至 

  • xImage
  •  

大家好!今天的題目如果有刷題經驗的人相信都有寫過,因為它是Array系列的第一題。那就廢話不多說,直接上題目:

/*
 Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

 

Example 1:

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Output: Because nums[0] + nums[1] == 9, we return [0, 1].
Example 2:

Input: nums = [3,2,4], target = 6
Output: [1,2]
Example 3:

Input: nums = [3,3], target = 6
Output: [0,1]
*/
var twoSum = function(nums, target) {     

};

這題會給一個數字陣列及目標值,我們希望能夠找到數字陣列中,哪兩個數字相加會與目標值相等,並回傳的兩個值在陣列中的位置。

思考:

  1. 一開始看到這題,要如何在迴圈中找到這兩個位置,有點沒頭緒。後來仔細想想,可以使用target來找到相對應的值。所以,我先宣告兩個變數,一個是用來找每一次相對應值,另一個是對應值的位置,以及一個空陣列來蒐集結果。
var twoSum = function(nums, target) {     
  let result =[]
  let num
  let numIndex
}
  1. 接下來用迴圈方式來找每一次相對應值與它的位置
var twoSum = function(nums, target) {     
  let result =[]
  let num
  let numIndex
   for(let i = 0; i < nums.length; i++){
    num = target - nums[i]
    numIndex = nums.indexOf(num)
}
  1. 用if做判斷,如果這個對應值不等於-1(-1代表陣列沒有這個對應值),將結果掉丟進result並結束迴圈。
var twoSum = function(nums, target) {     
  let result = []
  let numIndex
  let num
  for(let i = 0; i < nums.length; i++){
    num = target - nums[i]
    numIndex = nums.indexOf(num)
    if(numIndex !== -1 ){
      result = [i, numIndex]
      break
    }
  }
  return result
};
  1. 接下會遇到一個問題是,如果那一次迴圈的數值與要找的對應值相同,那用indexOf找到的位置會是那一次迴圈的數值,而不是對應值的位置。所以,如果當下迴圈的值等於對應值,先把當下的值改成undefined,再去找對應值的位置。
var twoSum = function(nums, target) {     
  let result = []
  let numIndex
  let num
  for(let i = 0; i < nums.length; i++){
    num = target - nums[i]
    if(nums[i] === num){
      nums[i] = undefined
    }
    numIndex = nums.indexOf(num)
    if(numIndex !== -1 ){
      result = [i, numIndex]
      break
    }
  }
  return result
};

以上是今天內容!寫法上有非常大的進步空間。如果有哪位大大路過經過,還請多多賜教。


上一篇
新手學習JavaScript:day21 - Max Consecutive Ones
下一篇
新手學習JavaScript:day23 - Best Time to Buy and Sell Stock
系列文
純新手學習 JavaScript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
janshawn
iT邦新手 5 級 ‧ 2020-10-06 10:39:37

我大神朋友簡單提供~

var twoSum = function (nums, target) {
    for (let i = 0; i < nums.length; i++) {
        for (let j = i + 1; j < nums.length; j++) {
            if (nums[i] + nums[j] == target) return [i, j];
        }
    }
    return '無符合';
};
console.log(twoSum([2, 7, 11, 15], 9));//[0,1]
console.log(twoSum([3, 2, 4], 6));//[1,2]
console.log(twoSum([3, 3], 6));//[0,1]
console.log(twoSum([1, 2, 3, 4], 10));//無符合

給你參考~~

我要留言

立即登入留言